#ifndef _BINARY_STRING_HPP
#define _BINARY_STRING_HPP

namespace unitraf
{

//this define an interface for binary strings 
class BinaryString
{
public:
	virtual ~BinaryString( );

	//methods
	virtual size_t getLength( ) const = 0;
	virtual bool getBit( size_t pos ) const = 0;
	virtual void setBit( size_t pos, bool bit = true ) = 0;
	virtual void flipBit( size_t pos ) = 0;
	virtual BinaryString* clone( ) const = 0;
	virtual unsigned long toUlong( ) const = 0;
	virtual unsigned long toUlong(size_t begin, size_t end ) const = 0;

private:
	BinaryString(const BinaryString&) { } //it`s an interface class.

protected:
	BinaryString(void) { } //it`s an interface class.
};

} //namespace unitraf

#endif //#ifndef _BINARY_STRING_HPP

